package mao.thinkinjava.concurency.threadlocal;

import java.util.Random;

/**
 * @author Totoro
 * @date 2020/5/11 14:55
 * 不同的线程获取ThreadLocal变量时，其会给每个线程保存（初始化）一个副本。
 * 相当于ThreadLocal包装了一下原变量。
 */
public class ThreadLocalVariableHolder {
    Integer i = new Integer(10);
    private static ThreadLocal<Integer> value =
            new ThreadLocal<Integer>(){
                {
                    System.out.println("thread local initialValue");
                }
                protected Random r = new Random(47);
                @Override
                //这里为什么要同步？
                protected  synchronized Integer initialValue() {
                    System.out.println("initialValue");
                    return r.nextInt(1000);
                }
            };
   public static int get(){
       return value.get();
   }
   public static void increment(){
       value.set(value.get()+1);
       return;
   }
}
